import os
import unittest
import ddt
from common.browser import open_browser
from page.page_index import Index
from page.page_register import Register
from common.data_operation import DataOperation

# 准备数据
# 获取当前工程绝对路径
report = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 存放账号数据的表格名称
file_name = 'data/user_register.xls'
# 路径拼接
file_path = os.path.join(report, file_name)
# 账号sheet_name='fail1'
user_register_fail1_account = DataOperation(path=file_path, sheet_name='fail1').get_data_todict()
# 账号sheet_name='fail2'
user_register_fail2_account = DataOperation(path=file_path, sheet_name='fail2').get_data_todict()


@ddt.ddt
class TestUserRegisterFail(unittest.TestCase):
    # 大夹具,在所有测试方法执行之前打开浏览器
    @classmethod
    def setUpClass(cls) -> None:
        # 打开浏览器
        driver = open_browser()
        # 创建首页page和注册page的实例对象
        cls.index = Index(driver)
        cls.register = Register(driver)

    @ddt.data(*user_register_fail1_account)
    def test_fail1(self, data):
        # 请求网址
        self.index.get(self.index.index_url)
        # 隐式等待
        self.index.implicitly_wait()
        # 点击请注册
        self.index.btn_index_register()
        # 注册操作
        self.register.ipt_username(data['username'])  # 用户名
        self.register.ipt_email(data['email'])        # 邮箱
        self.register.ipt_password1(data['password1'])  # 密码
        self.register.ipt_password(data['password2'])  # 确认密码
        self.register.tel(data['tel'])  # 手机
        self.register.btn_register()  # 点击注册
        # 断言注册失败
        username = self.index.username_text()
        self.assertIsNone(username)

    @ddt.data(*user_register_fail2_account)
    def test_fail2(self, data):
        # 请求网址
        self.index.get(self.index.index_url)
        # 隐式等待
        self.index.implicitly_wait()
        # 点击请注册
        self.index.btn_index_register()
        # 注册操作
        self.register.ipt_username(data['username'])  # 用户名
        self.register.ipt_email(data['email'])  # 邮箱
        self.register.ipt_password1(data['password1'])  # 密码
        self.register.ipt_password(data['password2'])  # 确认密码
        self.register.tel(data['tel'])  # 手机
        self.register.btn_register()  # 点击注册
        # 断言注册失败
        alert = self.index.switch_to_alert()
        self.assertIsNone(alert)

    # 大夹具,在所有测试方法执行后关闭浏览器
    @classmethod
    def tearDownClass(cls) -> None:
        cls.register.quit()


if __name__ == '__main__':
    unittest.main(verbosity=2)


"""
1.用户名长度不能少于 3 个字符。不能为纯数字,不能为特殊字符
2.邮件地址不合法
3.登录密码不能少于 6 个字符
4.两次输入密码不一致
5.手机号不是有效号码
"""